package com.think.utils;

import java.util.Random;
import java.util.UUID;

/**
 * @description	<pre>
 * ID生成工具类
 *	</pre>
 * @author	dzy
 * @date	2016年4月20日
 */
public class IDUtil {
	
	final static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8',  
        '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',  
        'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',  
        'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',  
        'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',  
        'Z' };   

	/**
	 * 生成32位uuid
	 * @return
	 */
	public static String genUUID32(){
		return UUID.randomUUID().toString().replace("-", "");
	}
	

	/**
	 * 生成8位uuid
	 * @return
	 */
	public static String genUUID8() {  
		StringBuffer shortBuffer = new StringBuffer();  
		String uuid = genUUID32();  
		for (int i = 0; i < 8; i++) {  
		    String str = uuid.substring(i * 4, i * 4 + 4);  
		    int x = Integer.parseInt(str, 16);  
		    shortBuffer.append(digits[x % 0x3E]);  
		}  
		return shortBuffer.toString();  
	}
	
	/** 
	 * 随机ID生成器，由数字、小写字母和大写字母组成 
	 * @param size 指定长度
	 * @return 
	 */  
	public static String genId(int size) {  
	    Random random = new Random();  
	    char[] cs = new char[size];  
	    for (int i = 0; i < cs.length; i++) {  
	        cs[i] = digits[random.nextInt(digits.length)];  
	    }  
	    return new String(cs);  
	}  
	
	/**
	 * 生成流水号，时间戳加上3位随机数,共16位
	 * @return
	 */
	public static String genSerialNo16(){
		//取当前时间的长整形值包含毫秒
		long millis = System.currentTimeMillis();
		//long millis = System.nanoTime();
		//加上四位随机数
		Random random = new Random();
		int end3 = random.nextInt(999);
		//如果不足三位前面补0
		String str = millis + String.format("%03d", end3);
		return str;
	}
}
